Ссылки по теме

*   [ATI (Русский)](/index.php/ATI_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ATI (Русский)")
*   [Intel graphics (Русский)](/index.php/Intel_graphics_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Intel graphics (Русский)")
*   [Nouveau (Русский)](/index.php/Nouveau_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Nouveau (Русский)")

[Kernel Mode Setting](https://en.wikipedia.org/wiki/Mode_setting "wikipedia:Mode setting") (KMS) представляет собой метод для задания разрешения дисплея и глубины в пространстве ядра, а не в пространстве пользователя.

Реализация KMS в ядре Linux активирует родное расширение в [framebuffer](/index.php/Framebuffer "Framebuffer") и допускает мгновенное переключение консолей (tty). KMS содержит новые технологии (такие как DRI2) которые помогают снизить количество артефактов и увеличить производительность в 3D, даже при включенном режиме энергосбережения.

**Примечание:** Проприетарные драйвера [NVIDIA](/index.php/NVIDIA "NVIDIA") и [catalyst](/index.php/Catalyst "Catalyst") так же поддерживают KMS, но так как они не используют встроенную реализацию ядра, то не обеспечивают работу драйвера FBdev для отображения консоли с высоким разрешением.

## Contents

*   [1 История](#.D0.98.D1.81.D1.82.D0.BE.D1.80.D0.B8.D1.8F)
*   [2 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0)
    *   [2.1 Поздний запуск KMS](#.D0.9F.D0.BE.D0.B7.D0.B4.D0.BD.D0.B8.D0.B9_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA_KMS)
    *   [2.2 Ранний запуск KMS](#.D0.A0.D0.B0.D0.BD.D0.BD.D0.B8.D0.B9_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA_KMS)
*   [3 Устранение неполадок](#.D0.A3.D1.81.D1.82.D1.80.D0.B0.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BD.D0.B5.D0.BF.D0.BE.D0.BB.D0.B0.D0.B4.D0.BE.D0.BA)
    *   [3.1 Мои шрифты слишком маленькие](#.D0.9C.D0.BE.D0.B8_.D1.88.D1.80.D0.B8.D1.84.D1.82.D1.8B_.D1.81.D0.BB.D0.B8.D1.88.D0.BA.D0.BE.D0.BC_.D0.BC.D0.B0.D0.BB.D0.B5.D0.BD.D1.8C.D0.BA.D0.B8.D0.B5)
    *   [3.2 Проблемы во время загрузки и dmesg](#.D0.9F.D1.80.D0.BE.D0.B1.D0.BB.D0.B5.D0.BC.D1.8B_.D0.B2.D0.BE_.D0.B2.D1.80.D0.B5.D0.BC.D1.8F_.D0.B7.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D0.BA.D0.B8_.D0.B8_dmesg)
*   [4 Принудительный режим и EDID](#.D0.9F.D1.80.D0.B8.D0.BD.D1.83.D0.B4.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B9_.D1.80.D0.B5.D0.B6.D0.B8.D0.BC_.D0.B8_EDID)
*   [5 Отключение modesetting](#.D0.9E.D1.82.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_modesetting)

## История

Ранее настройками видео карты занимался непосредственно X сервер. По этой причине достигнуть высокого качества графики в tty консолях было непросто. Кроме того, каждый раз при переключении из X в виртуальную консоль с помощью комбинации клавиш (`Ctrl+Alt+F1`) сервер должен был передавать управление видеокартой ядру, что было медленным и вызывало мерцания. Особенно "болезненным" был переход управления обратно к X серверу (`Ctrl+Alt+F7`).

С использованием Kernel Mode Setting (KMS) ядру стала доступна установка режимов видео карты. Наряду с другими достоинствами это улучшает визуальные эффекты при установке параметров графики, а также позволяет быстрее переключаться между виртуальными консолями и X.

## Установка

Обратите внимание - для *любых* используемых Вами методов необходимо *всегда* отключать:

*   Любые `vga=` режимы в загрузчике, так как это вызовет конфликт с разрешением, активированным в KMS.
*   Любые `video=` строки, активирующие framebuffer, что вызовет конфликт с драйвером.
*   Любые другие драйвера framebuffer (такие как [uvesafb](/index.php/Uvesafb "Uvesafb")).

### Поздний запуск KMS

Драйвера [Intel](/index.php/Intel_graphics_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Intel graphics (Русский)"), [Nouveau](/index.php/Nouveau_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Nouveau (Русский)") и [ATI](/index.php/ATI_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ATI (Русский)") уже активируют KMS автоматически для всех чипсетов, так что не требуется ручной настройки.

Проприетарные драйвера [NVIDIA](/index.php/NVIDIA_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "NVIDIA (Русский)") и [AMD Catalyst](/index.php/AMD_Catalyst_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "AMD Catalyst (Русский)") не используют стек свободных драйверов. В случае использования KMS необходимо заменить ими свободные драйвера.

### Ранний запуск KMS

Ранний запуск KMS возможен во время процесса загрузки путём добавления модуля `radeon` (для ATI/AMD карт), `i915` (для графики Intel) или `nouveau` (для карт Nvidia) в строку `MODULES` в `/etc/mkinitcpio.conf`. Например:

 `/etc/mkinitcpio.conf`  `MODULES="... i915 ..."` 
**Примечание:** Пользователям Intel может понадобиться добавление `intel_agp` перед `i915` для подавления ошибок ACPI.

Если Вы используете изменённый файл EDID (не совпадающий с преднастроенными разрешениями), следует встроить его в initramfs:

 `/etc/mkinitcpio.conf`  `FILES="/usr/lib/firmware/edid/your_edid.bin"` 

Пересоберите образ ядра (смотрите статью о [mkinitcpio](/index.php/Mkinitcpio "Mkinitcpio") для получения дополнительной информации):

```
# mkinitcpio -p <name of your kernel preset; e.g. *linux*>

```

## Устранение неполадок

### Мои шрифты слишком маленькие

Смотрите статью [Fonts](/index.php/Fonts_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Fonts (Русский)") о том, как изменить шрифт в консоли на более крупный. Например, шрифт Terminus ([terminus-font](https://www.archlinux.org/packages/?name=terminus-font)) доступен в нескольких размерах, в том числе и в больших.

### Проблемы во время загрузки и dmesg

Опрос подключенных дисплеев на старых системах может быть довольно громоздким. Опрос происходит периодически и может занять несколько сотен миллисекунд в зависимости от оборудования.

Если выскакивает ошибка с кодом `0x00000010 (2)` во время процесса загрузки (Вы можете получить около 10 строк текста, последняя часть содержит этот код), используйте:

 `/etc/modprobe.d/modprobe.conf`  `options drm_kms_helper poll=0` 

## Принудительный режим и EDID

В случае когда Ваш дисплей не отправляет соответствующий [EDID](https://en.wikipedia.org/wiki/EDID "wikipedia:EDID") или вызывает какие-либо проблемы, Вы будете уведомлены, что родное разрешение автоматически не настроено или не отображается вообще. Ядро имеет условие для загрузки бинарных данных EDID, и поддерживает четыре наиболее типичных разрешения.

Если у Вас имеется EDID файл для Вашего монитора, процесс упрощается. Если нет, можете использовать один из преднастроенных EDID файлов (или сгенерированных однажды во время компиляции ядра, [больше информации здесь](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/EDID/HOWTO.txt)) или создать свой собственный EDID.

В случае когда EDID имеется (например извлечённый из Windows драйверов для Вашего монитора или полученный командой `get-edid` из пакета [read-edid](https://www.archlinux.org/packages/?name=read-edid)), создайте директорию `edid` в `/usr/lib/firmware`:

```
# mkdir /usr/lib/firmware/edid

```

затем скопируйте Ваш файл в директорию `/usr/lib/firmware/edid`.

Для запуска во время загрузки, следуйте указаниям из [kernel command line](/index.php/Kernel_parameters_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Kernel parameters (Русский)"):

```
drm_kms_helper.edid_firmware=edid/your_edid.bin

```

Также, можно указать только для заданного дисплея:

```
drm_kms_helper.edid_firmware=VGA-1:edid/your_edid.bin

```

Для преднастроенные разрешений, смотри таблицу имён спецификаций:

| **Разрешение** | **Имя спецификации** |
| 1024x768 | edid/1024x768.bin |
| 1280x1024 | edid/1280x1024.bin |
| 1600x1200 (kernel 3.10 or higher) | edid/1600x1200.bin |
| 1680x1050 | edid/1680x1050.bin |
| 1920x1080 | edid/1920x1080.bin |

Если осуществлён ранний запуск KMS, необходимо включить кастомизированный файл EDID в [initramfs](#.D0.A0.D0.B0.D0.BD.D0.BD.D0.B8.D0.B9_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA_KMS) иначе возможны проблемы.

Вы также можете собрать собственный EDID с использованием makefile входящего в ядро (см. `Documentation/EDID`). Полная информация доступна по адресам [здесь](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/EDID/HOWTO.txt) и [здесь](https://www.osadl.org/Single-View.111+M591850c02b5.0.html).

**Важно:** Метод описанный ниже немного не завершён потому что Xorg не принимает заданные разрешения, так что советуем использовать метод, описанный выше; однако, указание разрешения с помощью строки `video=` может оказаться полезным в некоторых событиях.

Взято из [nouveau wiki](http://nouveau.freedesktop.org/wiki/KernelModeSetting):

Режим может быть принудительным в командной строке ядра. К сожалению, опция командной строки видео бедно документирована в случае с DRM. Части и куски того как это использовать можно найти в

*   [http://cgit.freedesktop.org/nouveau/linux-2.6/tree/Documentation/fb/modedb.txt](http://cgit.freedesktop.org/nouveau/linux-2.6/tree/Documentation/fb/modedb.txt)
*   [http://cgit.freedesktop.org/nouveau/linux-2.6/tree/drivers/gpu/drm/drm_fb_helper.c](http://cgit.freedesktop.org/nouveau/linux-2.6/tree/drivers/gpu/drm/drm_fb_helper.c)

В формате:

```
video=<conn>:<xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]

```

*   <conn>: Коннектор, т.н. DVI-I-1, смотри доступные здесь `/sys/class/drm/`
*   <xres> x <yres>: разрешение
*   M: посчитать режим CVT?
*   R: снижение мерцания?
*   -<bpp>: глубина цвета
*   @<refresh>: частота обновления
*   i: черезстрочный (non-CVT mode)
*   m: поля?
*   e: принудительный вывод on
*   d: принудительный вывод off
*   D: принудительный цифровой вывод on (т.н. DVI-I коннектор)

Вы можете переопределять режимы нескольких выходов использующих "video" несколько раз, в частности, для вывода DVI в 1024x768 на 85 Hz и отключения TV-out:

```
video=DVI-I-1:1024x768@85 video=TV-1:d

```

Для получения имени и текущего статуса коннекторов, Вы можете использовать однострочную команду:

 `$ for p in /sys/class/drm/*/status; do con=${p%/status}; echo -n "${con#*/card?-}: "; cat $p; done` 
```

DVI-I-1: connected
HDMI-A-1: disconnected
VGA-1: disconnected

```

## Отключение modesetting

Вы можете захотеть отключить KMS по различным причинам, таким как получение пустого экрана или "no signal" ошибку с монитора, когда используются драйвера Catalyst, и т.п. Для отключения KMS добавьте `nomodeset` в параметры ядра. См. [Kernel parameters](/index.php/Kernel_parameters_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Kernel parameters (Русский)") для более подробной информации.

Наряду с параметром `nomodeset`, для карт Intel необходимо добавить `i915.modeset=0`, а для Nvidia `nouveau.modeset=0`. Для систем двойной графики (dual-graphics system) Nvidia Optimus, нужно добавить все три параметра ядра (`"nomodeset i915.modeset=0 nouveau.modeset=0"`).

**Примечание:** Некоторые драйвера [Xorg](/index.php/Xorg "Xorg") не работают с отключенным KMS. Читайте wiki для Вашего оборудования для подробностей.